/**
*  \file    smul.h
*
*  \brief   multiply routines with data type limit saturation
*
*  \author  Francesco D'Aprea <francesco.daprea@linde-mh.de>
*
*
*/

#ifndef SMUL_H_INCLUDED
#define SMUL_H_INCLUDED

/*================================================[ public includes  ]================================================*/
#include "../cfg/prj.h"
#include "../saturated/scast.h"

/*================================================[ public defines   ]================================================*/

#define SATURATED_MUL(T_VAL,T_NEXT) \
   T_NEXT res = ( (T_NEXT)val * (T_NEXT)mul ); \
   return saturated_cast_##T_NEXT##_##T_VAL( res );

/*================================================[ public datatypes ]================================================*/

/*================================================[ public variables ]================================================*/

/*================================================[ public functions ]================================================*/

STATIC_INLINE U8 saturated_mul_U8( U8 val, U8 mul )
{
   SATURATED_MUL( U8, U16 )
}
STATIC_INLINE U16 saturated_mul_U16( U16 val, U16 mul )
{
   SATURATED_MUL( U16, U32 )
}
STATIC_INLINE S8 saturated_mul_S8( S8 val, S8 mul )
{
   SATURATED_MUL( S8, S16 )
}
STATIC_INLINE S16 saturated_mul_S16( S16 val, S16 mul )
{
   SATURATED_MUL( S16, S32 )
}

/*====================================================================================================================*/

#endif

/***********************************************************************************************************************
*                             Copyright 2010 Linde Material Handling. All rights reserved.                             *
***********************************************************************************************************************/
